<?php

class Association{
    private $nom;
    private $datecreation;
    private $datedissolution;
    private $soldecompte;
    private $logo;
       
    private $active;
    private $prez;
    private $prezid;
    private $secr;
    private $secrid;
    private $trez;
    private $trezid;
   
    private $tresorerie;//tableau avec les transactions de l'asso
    
    private $membres; //tableau avec la liste des membres pour chaque semestre
    private $membresnonval;  //tableau avec la liste des membres non validé pour chaque semestre 
    private $Nowmembres;
    private $rapports; //tableau avec la liste des rapports
    private $objets; //tableau avec la liste des objets de l'asso
    private $sallest; //tableau avec la liste des salles permanentes et temporaires de l'asso
    private $sallesp;
    
    public function __construct($_nom){
        $this->nom=$_nom;
    }
    
    public function debug(){
        //fonction outil qui affiche simplement le contenu de chaque attribut
        print_r($this->nom);
        print_r($this->datecreation);
        print_r($this->datedissolution);
        print_r($this->soldecompte);
        print_r($this->logo);
                      
    }
    
     public function FillFromNom(DbConnection $db){
        
        $sql='SELECT datecreation, datedissolution, soldecompte, logo FROM Association WHERE nom=\''.$this->nom.'\' ;';
        $sqlt='SELECT personne AS trez, id AS idtrez FROM membreasso JOIN apourrole
            ON apourrole.membreasso=membreasso.id
            WHERE membreasso.association=\''.$this->nom.'\' 
            AND membreasso.semestre=\''.GetSemester().'\'
            AND apourrole.role=\'Trésorier\';';
        $sqlp='SELECT personne AS prez, id AS idprez FROM membreasso JOIN apourrole
            ON apourrole.membreasso=membreasso.id
            WHERE membreasso.association=\''.$this->nom.'\' 
            AND membreasso.semestre=\''.GetSemester().'\'
            AND apourrole.role=\'Président\';';
        $sqls='SELECT personne AS secr, id AS idsecr  FROM membreasso JOIN apourrole
            ON apourrole.membreasso=membreasso.id
            WHERE membreasso.association=\''.$this->nom.'\' 
            AND membreasso.semestre=\''.GetSemester().'\'
            AND apourrole.role=\'Secrétaire\';';
        $query= new DbQuery($db,$sql);
        $query->SendQuery();
        $result=$query->GetResult();
        if(isset($result))
        {
            $this->datecreation=$result['datecreation'];
            $this->datedissolution=$result['datedissolution'];
            $this->soldecompte=$result['soldecompte'];
            $this->logo=$result['logo'];
        }
        
        $query= new DbQuery($db,$sqlt);
        $query->SendQuery();
        $result=$query->GetResult();
        if(isset($result))
        {
            $this->trez=$result['trez'];
            $this->trezid=$result['idtrez'];
        }
        $query= new DbQuery($db,$sqlp);
        $query->SendQuery();
        $result=$query->GetResult();
        if(isset($result))
        {
            $this->prez=$result['prez'];
            $this->prezid=$result['idprez'];
        }
        $query= new DbQuery($db,$sqls);
        $query->SendQuery();
        $result=$query->GetResult();
        if(isset($result))
        {
            $this->secr=$result['secr'];
            $this->secrid=$result['idsecr'];
            
            
        }
        if (empty($this->datedissolution)&&(!empty($this->prez)) ){
                $this->active=TRUE;
            }
            else
                $this->active=FALSE;
    }
    
    public function FillMembresArray(DbConnection $db){
        //rempli le tableau $membre avec le login, le semestre et le role 
        $sql='SELECT MA.personne, MA.semestre, APR.role FROM MembreAsso MA LEFT JOIN APourRole APR On MA.id=APR.membreasso WHERE MA.association=\''.$this->nom.'\'
               AND MA.valide=1 ORDER BY cast(substring(MA.semestre,2,3) as integer) DESC, substring(MA.semestre,1,1) ;';
        
        $query=new DbQuery($db,$sql);
        $query->SendQuery();
        $this->asso=array();
        
        $i=0;
        while($result=$query->GetResult()){
            $this->membres[$i]['personne']=$result['personne'];
            $this->membres[$i]['role']=$result['role'];
            $i++;      
        }
         
        $sql='SELECT MA.personne, MA.semestre, APR.role FROM MembreAsso MA LEFT JOIN APourRole APR On MA.id=APR.membreasso WHERE MA.association=\''.$this->nom.'\'
               AND MA.valide=1 And Semestre=\''.GetSemester().'\';';
        
        $query=new DbQuery($db,$sql);
        $query->SendQuery();
        $this->asso=array();
        
        $i=0;
        while($result=$query->GetResult()){
            $this->Nowmembres[$i]['semestre']=$result['semestre'];
            $this->Nowmembres[$i]['personne']=$result['personne'];
            $this->Nowmembres[$i]['role']=$result['role'];
            $i++;      
        }
    
    
        
        //rempli le tableau $membresnonval avec le login, le semestre et le role 
        $sql='SELECT MA.personne, MA.semestre,MA.id, APR.role FROM MembreAsso MA LEFT JOIN APourRole APR On MA.id=APR.membreasso WHERE MA.association=\''.$this->nom.'\'
               AND MA.valide=0 And Semestre=\''.GetSemester().'\';';
        
        $query=new DbQuery($db,$sql);
        $query->SendQuery();
        $this->asso=array();
        
        $i=0;
        while($result=$query->GetResult()){
            $this->membresnonval[$i]['personne']=$result['personne'];
            $this->membresnonval[$i]['id']=$result['id'];
            $this->membresnonval[$i]['role']=$result['role'];
            $i++;   
        }
        
    }
    
    public function FillTresorerieArray(DbConnection $db){
        //rempli le tableau $tresorerie avec la date, le tresorier en charge, le type de transaction, l'intitulé, le montant
         
        $sql = 'SELECT TR.date, MB.personne, TR.type, TR.intitule, TR.montant FROM transaction TR JOIN membreasso MB on MB.id=TR.tresorier WHERE MB.association=\''.$this->nom.'\' ORDER BY TR.date DESC;';
        
        $query= new DbQuery($db,$sql); //Création d'un objet Query grâce à la requete SQL et la BDD passée en paramètre
        $query->SendQuery();//envoi de la requête
        
        $this->tresorerie=array();
        
        $i=0;
        while($result=$query->GetResult()){
            $this->tresorerie[$i]['date']=$result['date'];
            $this->tresorerie[$i]['type']=$result['type'];
            $this->tresorerie[$i]['tresorier']=$result['personne'];
            $this->tresorerie[$i]['intitule']=$result['intitule'];
            $this->tresorerie[$i]['montant']=$result['montant'];
            $i++;      
        }
    
    }
    
    public function FillRapportsArray(DbConnection $db){
        //rempli le tableau $rapports avec la date, le titre + url, le redacteur
         
        $sql = 'SELECT dateedition, titre, url, MB.personne FROM membreasso MB, rapport JOIN rediger on rapport.id=rediger.rapport WHERE rapport.association=\''.$this->nom.'\' AND MB.id=rediger.redacteur ORDER BY dateedition DESC;';
        
        $query= new DbQuery($db,$sql); //Création d'un objet Query grâce à la requete SQL et la BDD passée en paramètre
        $query->SendQuery();//envoi de la requête
        
        $this->rapports=array();
        
        $i=0;
        while($result=$query->GetResult()){
            $this->rapports[$i]['dateedition']=$result['dateedition'];
            $this->rapports[$i]['personne']=$result['personne'];
            $this->rapports[$i]['titre']=$result['titre'];
            $this->rapports[$i]['url']=$result['url'];
            $i++;      
        }
    }
    public function FillObjetsArray(DbConnection $db){
        //rempli le tableau $objet avec le nom, la date, la salle, le resp
         //  login du responsable
        
        
        $sql = 'SELECT o.nom, o.datehs, o.sallestockage,o.id,m.personne FROM objet o
                JOIN acces on o.sallestockage=acces.sallepermanente
                JOIN Membreasso m on m.id=o.responsable
            WHERE acces.association=\''.$this->nom.'\' ORDER BY nom;';
        
        $query= new DbQuery($db,$sql); //Création d'un objet Query grâce à la requete SQL et la BDD passée en paramètre
        $query->SendQuery();//envoi de la requête
        $this->objets=array();
        
        
        
        $i=0;
        while($result=$query->GetResult()){
            $this->objets[$i]['nom']=$result['nom'];
            $this->objets[$i]['datehs']=$result['datehs'];
            $this->objets[$i]['sallestockage']=$result['sallestockage'];
            $this->objets[$i]['responsable']=$result['personne'];
            $this->objets[$i]['id']=$result['id'];
            $i++;      
        }
    }
    public function FillSallesArray(DbConnection $db){
        //rempli le tableau $salles avec la date, le titre + url, le redacteur
         
        $sql = 'SELECT sallepermanente FROM acces WHERE association=\''.$this->nom.'\';';
        $query= new DbQuery($db,$sql);
        $query->SendQuery(); //envoi de la requête
        
        $this->sallesp=array();
        $this->sallest=array();
        
        
        $i=0;
        while($result=$query->GetResult()){
            $this->sallesp[$i]=$result['sallepermanente'];
            $i++;      
        }
        
        
        $sqq = 'SELECT salle, fonction, datedebut,datefin FROM reservation WHERE association=\''.$this->nom.'\' ORDER BY datedebut, datefin DESC';
        $query2= new DbQuery($db,$sqq);
        $query2->SendQuery(); //envoi de la requête
        
        
       
        while($result2=$query2->GetResult()){
            $i=count($this->sallest);
            $this->sallest[$i]['nom']=$result2['salle'];
            $this->sallest[$i]['fonction']=$result2['fonction'];
            $this->sallest[$i]['datedebut']=$result2['datedebut'];
            $this->sallest[$i]['datefin']=$result2['datefin'];
            $i++;      
        }
        
    }
    
    
    
    //-------------Accesseurs
    public function IsActive(){
        return $this->active;
    }
    public function GetInfo(DbConnection $db){
        //Retourne un tableau clé/valeur avec les infos de la personne
        $this->FillMembresArray($db);
        $this->FillTresorerieArray($db);
        $this->FillFromNom($db);
        $this->FillSallesArray($db);
        $this->FillObjetsArray($db);
        $this->FillRapportsArray($db);
        $result=array();
        $result['nom']=$this->nom;
        $result['datecreation']=$this->datecreation;
        $result['datedissolution']=$this->datedissolution;
        $result['active']=  $this->active;
        $result['soldecompte']=$this->soldecompte;
        $result['logo']=$this->logo;
        $result['membres']=  $this->membres;
        $result['membresnonval']= $this->membresnonval;
        $result['Nowmembres']= $this->Nowmembres;
        $result['tresorerie']=  $this->tresorerie;
        $result['sallesp']=  $this->sallesp;
        $result['sallest']=  $this->sallest;
        $result['objets']=  $this->objets;
        $result['rapports']=  $this->rapports;
        $result['prez']=  $this->prez;
        $result['trez']=  $this->trez;
        $result['secr']=  $this->secr;
        $result['prezid']=  $this->prezid;
        $result['trezid']=  $this->trezid;
        $result['secrid']=  $this->secrid;
        
        return $result;
        
    }
    
    public function GetNom(){
        return $this->nom;
    }
    public function GetPrez(){
        return $this->prez;
    }
    
    public function GetMembres(DbConnection $db){
        $this->FillMembresArray($db);
        return $this->membres;
    }
    public function GetTresorerie(DbConnection $db){
        $this->FillTresorerieArray($db);
        return $this->tresorerie;
    }
   
    public function GetLogo(){
        return $this->logo;
    }
    
    public function GetActive(){
        return $this->active;
    }
}
?>
